package com.xiaobai;

/**
 * 工作者
 */
interface Worker {
    void study();
}

public class StaticProxy {
    public static void main(String[] args) {
        // 女朋友代理一下 我学习
        new MyGirlFriend(new My()).study();
        // 女朋友代理一下 我学习
        new MyGirlFriend(new MySon()).study();
    }
}

/**
 * 我就是个工作者
 */
class My implements Worker {
    @Override
    public void study() {
        System.out.println("学习中");
    }
}

class MySon implements Worker {
    @Override
    public void study() {
        System.out.println("我儿子在学习");
    }
}

/**
 * 女朋友代理别人工作者
 */
class MyGirlFriend implements Worker {

    private final Worker target;

    MyGirlFriend(Worker worker) {
        this.target = worker;
    }

    @Override
    public void study() {
        before();
        target.study();
        after();
    }

    public void before() {
        System.out.println("女朋友给了你一本Java从出生到入土");
    }

    public void after() {
        System.out.println("女朋友拿走你的书，赶紧去休息吧");
    }
}